package com.itcanteen.medical.patient.service;

import com.itcanteen.medical.common.exception.AdException;
import com.itcanteen.medical.patient.entity.Hospital;
import com.itcanteen.medical.patient.entity.Patient;
import com.itcanteen.medical.patient.request.HealthTestRequest;
import com.itcanteen.medical.patient.request.HospitalRequest;
import com.itcanteen.medical.patient.request.SendCodeRequest;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.springframework.web.multipart.MultipartFile;

/**
 * 患者 业务层
 * @author 1804A-TeamOne
 * @date 2020-12-17 16:24
 */
public interface PatientService {

    /**
     * 改变账户状态
     * @param loginResp 登陆请求类
     */
    void changeStatus (Patient loginResp);

    /**
     * 根据手机号查询患者
     * @param phone 手机号
     * @return com.itcanteen.medical.patient.entity.Patient
     */
    Patient selectPatientByPhone (Long phone);

    /**
     * 根据邮箱查询患者
     * @param email 邮箱
     * @return com.itcanteen.medical.patient.entity.Patient
     */
    Patient selectPatientByEmail (String email);

    /**
     * 根据用户名查询患者
     * @param username 用户名
     * @return com.itcanteen.medical.patient.entity.Patient
     */
    Patient selectPatientByUsername (String username);

    /**
     * 注册
     * @param registerRequest 注册请求类
     * @throws AdException 统一异常
     */
    void register (SendCodeRequest registerRequest) throws AdException;

    /**
     * 根据id查询患者
     * @param id 患者id
     * @return com.itcanteen.medical.patient.entity.Patient
     */
    Patient findById(Integer id);

    /**
     * 密码加密
     * @param password 密码
     * @return java.lang.String
     * @throws AdException 统一异常
     */
    String encodeByMd5(String password) throws AdException;

    /**
     * 更新密码
     * @param id 患者id
     * @param newPassword 新密码
     * @param session session
     * @throws AdException 统一异常
     */
    void updatePassword(Integer id, String newPassword, HttpSession session) throws AdException;

    /**
     * 修改患者
     * @param patient 患者信息
     */
    void updatePatient(Patient patient);

    /**
     * 修改绑定手机号
     * @param id 患者id
     * @param phone 手机号
     * @param session session
     */
    void changeBindingPhone(Integer id, Long phone, HttpSession session);

    /**
     * 修改绑定邮箱
     * @param id 患者id
     * @param email 邮箱
     * @param session session
     */
    void changeBindingEmail(Integer id, String email, HttpSession session);

    /**
     * 修改积分
     * @param id 患者id
     * @param integral 积分
     */
    void changeIntegral(Integer id, Integer integral);

    /**
     * 修改患者头像
     * @param id 当前登录患者id
     * @param headImages 头像url
     * @return java.lang.String
     * @throws IOException IO异常
     */
    String changeAvatar(Integer id, MultipartFile headImages) throws IOException;

    /**
     * 修改余额
     * @param patientId 患者id
     * @param payMoney 支付金额
     * @return int
     */
    int updatePatientBalance(int patientId, Double payMoney);

    /**
     * 健康测试
     * @param healthTestRequest 健康测试请求
     * @return com.itcanteen.medical.patient.request.HealthTestRequest
     */
    HealthTestRequest healthTest(HealthTestRequest healthTestRequest);

}
